package com.jzo2o.common.expcetions;

import cn.hutool.http.HttpStatus;
import com.jzo2o.common.constants.ErrorInfo;
import lombok.Data;

import static java.net.HttpURLConnection.HTTP_BAD_REQUEST;

/**
 * 自定义通用异常类，作为所有业务异常的基类
 * 封装了异常状态码和异常消息，便于统一处理异常响应
 */
@Data
public class CommonException extends RuntimeException {
    /**
     * 异常状态码（通常对应HTTP状态码或业务自定义错误码）
     */
    private int code;
    /**
     * 异常详细消息
     */
    private String message;

    /**
     * 使用默认错误码（400）和默认消息构造通用异常
     */
    public CommonException() {
        this.code = HTTP_BAD_REQUEST;
        this.message = ErrorInfo.Msg.PROCESS_FAILD;
    }

    /**
     * 使用指定错误码和消息构造通用异常
     * @param code 异常状态码
     * @param message 异常消息
     */
    public CommonException(int code, String message) {
        this.code = code;
        this.message = message;
    }

    /**
     * 使用指定原因、错误码和消息构造通用异常
     * @param throwable 异常原因
     * @param code 异常状态码
     * @param message 异常消息
     */
    public CommonException(Throwable throwable, int code, String message) {
        this.code = code;
        this.message = message;
    }

    /**
     * 使用指定消息构造通用异常（默认错误码500）
     * @param message 异常消息
     */
    public CommonException(String message) {
        this(HttpStatus.HTTP_INTERNAL_ERROR, message);
    }

}
